home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_15_1987_Transactor_Publishing.d64 / freq cntr.pal (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  2KB  |  97 lines

  1. 100 rem open 1,8,1,"@0:freq.cntr.@c000" :rem  file for object code
  2. 110 sys 700 ;pal 64 assembler
  3. 120 .opt oo
  4. 130 ; save"@0:freq cntr.pal",8
  5. 140 ;----------------------------------
  6. 150 ;-       frequency counter        -
  7. 160 ;-         source  code           -
  8. 170 ;----------------------------------
  9. 180 ; uses cia #2, timer a
  10. 190 ; count is stored at 680, 681
  11. 200 ; gate value is stored at 822
  12. 210 ; overflow sets 823
  13. 220 ;.opt o1 ;sends object code to disk
  14. 230 ;
  15. 240 *=$c000 ;start address
  16. 250 ;sys 49152-to start counting
  17. 260 ;sys 49155-to stop counting and disable interrupt wedge
  18. 270 ;system equates
  19. 280 cia2   =$dd00
  20. 290 talo   =cia2+$04;timer a count registers
  21. 300 tahi   =cia2+$05
  22. 310 icr    =cia2+$0d;cia interrupt control register
  23. 320 cra    =cia2+$0e;cia control register
  24. 330 oldirq =$0334  ;storage for old irq
  25. 340 irqvec =$0314
  26. 350 flag   =679
  27. 360 count  =680
  28. 370 gate   =$0336  ;storage for count down value
  29. 380 overflow =823
  30. 390 ;
  31. 400 jmp connect
  32. 410 ;disconnect routine
  33. 420 sei
  34. 430 lda oldirq     ;put old irq vector back
  35. 440 sta irqvec     ; in
  36. 450 lda oldirq+1
  37. 460 sta irqvec+1
  38. 470 lda #$00
  39. 480 sta cra        ;stop timer
  40. 490 cli
  41. 500 rts
  42. 510 ;
  43. 520 connect =*
  44. 530 sei            ;disable interrupts
  45. 540 lda irqvec
  46. 550 sta oldirq     ;store old irq vector
  47. 560 lda irqvec+1
  48. 570 sta oldirq+1
  49. 580 lda #<start    ;point to our routine
  50. 590 sta irqvec
  51. 600 lda #>start    ;same with high byte
  52. 610 sta irqvec+1
  53. 620 lda #$ff
  54. 630 sta talo
  55. 640 sta tahi       ;load timer latch with maximum count
  56. 650 lda #60
  57. 660 sta gate       ;use a default value of 60
  58. 670 lda gate       ;get count-down value
  59. 680 sta flag       ;put it in the flag register
  60. 690 lda #$00
  61. 700 sta icr        ;disable cia interupts
  62. 710 lda #%00110001
  63. 720 sta cra        ;force load and start counting
  64. 730 cli
  65. 740 rts            ;all done so return
  66. 750 ;
  67. 760 ;counter routine starts here
  68. 770 start =*
  69. 780 ;
  70. 790 dec flag       ;check countdown flag
  71. 800 bne done       ;not timed out so exit
  72. 810 getcnt =*      ;routine to read count
  73. 820 lda gate
  74. 830 sta flag       ;reset flag for next time
  75. 840 lda #%00100000 ;set bit 5
  76. 850 sta cra        ;to stop timer
  77. 860 lda talo
  78. 870 eor #$ff
  79. 880 sta count      ;convert to up-counter and store result
  80. 890 lda tahi
  81. 900 eor #$ff
  82. 910 sta count+1    ;same with high byte
  83. 920 lda #$ff
  84. 930 sta talo
  85. 940 sta tahi       ;reset timer latch
  86. 950 lda #%00110001 ;force load + start timer
  87. 960 sta cra
  88. 970 lda icr
  89. 980 and #%00000011 ;mask off upper 6 bits of status register
  90. 990 sta overflow   ;and save it
  91. 1000 ;
  92. 1010 ;
  93. 1020 done =*
  94. 1030 jmp (oldirq)   ;(NULL) to normal irq routine
  95. 1040 ;
  96. 1050 .end
  97.